package com.dlc.shop.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.dlc.shop.bean.model.Order;
import com.dlc.shop.bean.param.*;

import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @author lgh on 2018/09/15.
 */
public interface OrderDataAnalysisService extends IService<Order> {

    /**
     * 统计时间内， 成功付款订单的商品件数之和（不剔除退款订单）
     * @param param 统计参数
     * @return 成功付款订单的商品件数之和
     */
    CustomerRespParam countPayNum(CustomerReqParam param);

    /**
     * 统计时间内， 访客数、付款人数等信息
     * @param customerReqParam 统计参数
     * @param levelMap 会员等级信息
     * @return 统计时间内， 访客数、付款人数等信息
     */
    List<CustomerPayParam> countCustomerParam(CustomerReqParam customerReqParam, Map<Date, Integer> levelMap);

    /**
     * 统计时间内, 成交会员数
     * @param param 统计参数
     * @return 成交会员数
     */
    Integer countMemberPayNum(CustomerReqParam param);

    /**
     * 客户分析，成交客户分析
     * @param param 参数
     * @return 客户分析，成交客户分析
     */
    CustomerDealRespParam getCustomerDeal(CustomerReqParam param);

    /**
     * 客户洞察，RFM模型分析
     * @param param 参数
     * @return RFM模型分析
     */
    List<CustomerRfmRespParam> countPayNumRfm(CustomerRfmReqParam param);

    /**
     * 客户洞察，消费能力分析
     * @param param 参数
     * @return 客户洞察，消费能力分析
     */
    CustomerConsumeRespParam getConsumePower(CustomerConsumeReqParam param);

    /**
     * 客户洞察，消费频次分析
     * @param param 参数
     * @return 客户洞察，消费频次分析
     */
    CustomerConsumeRespParam getConsumeFrequency(CustomerConsumeReqParam param);

    /**
     * 客户洞察，回购周期分析
     * @param param 参数
     * @return 客户洞察，回购周期分析
     */
    CustomerRepurchaseRespParam getConsumeRepurchaseCount(CustomerConsumeReqParam param);

    /**
     * 会员分析，会员贡献价值分析
     * @param param 参数
     * @return 会员分析，会员贡献价值分析
     */
    MemberContributeRespParam getMemberContributeValue(MemberReqParam param);

    /**
     * 会员分析，新老会员成交分析
     * @param param 参数
     * @return 新老会员成交分析
     */
    MemberDealRespParam getMemberDeal(MemberReqParam param);


    /**
     * 客户洞察，RFM模型分析
     * @param param 参数
     * @return 客户洞察，RFM模型分析
     */
    List<CustomerRfmRespTableParam> countPayNumRfm2(CustomerRfmReqParam param);

    /**
     * 最近消费时间 消费金额 实付金额 消费次数 平均折扣
     * @param param 参数
     * @return 最近消费时间 消费金额 实付金额 消费次数 平均折扣
     */
    UserManagerParam getConsumeData(UserManagerParam param);

    /**
     * 获取用户的成交留存率, 统计用户第一次成交后，之后的1到6个月的留存用户数
     * @param param 条件查询参数
     * @return 成交留存信息列表
     */
    List<CustomerRetainRespParam> getTradeRetained(CustomerRetainedReqParam param);

    /**
     * 根据订单号获取订单及订单项
     *
     * @param orderNumberList   订单编号列表
     * @param paySettlementType
     * @return 订单列表
     */
    List<Order> getOrderAndOrderItemByOrderNumberList(Set<String> orderNumberList, Integer paySettlementType);

    /**
     * 清除成交留存率换成
     * @param param 参数
     */
    void removeCacheTradeRetained(CustomerRetainedReqParam param);
}
